//https://leetcode.cn/problems/three-steps-problem-lcci/description/
//三步问题
//三步问题。有个小孩正在上楼梯，楼梯有n阶台阶，小孩一次可以上1阶、2阶或3阶。实现一种方法，计算小孩有多少种上楼梯的方式。结果可能很大，你需要对结果模1000000007。

class Solution {
public:
    int waysToStep(int n) {
        int dp[n + 1];
        dp[0] = dp[1] = 1; 
        if(n >= 2){dp[2] = 2;}
        
        for(size_t i = 3; i <= n; i++)
        {
            dp[i] = (dp[i - 1] + dp[i - 2]) % 1000000007;
            dp[i] = (dp[i] + dp[i - 3]) % 1000000007;
        }

        return dp[n];
    }
};